Modern integrated circuits and semiconductor chips perform a wide variety of functions in the electronic systems with which people interact daily. The chips result from highly complex circuit designs, architectures, and implementations. They are integral to the electronic systems, providing communications, computing, and networking for business, entertainment, or consumer electronics. The electronic systems routinely contain more than one chip, and the chips perform critical functions such as computation, storage, and control. These chips compute algorithms and heuristics, handle data, communicate internally and externally to the electronic system, and so on, in support of the purposes of the electronic systems. Since there are so many computations that must be performed, any improvements in the efficiency of the chips have a large impact on overall system performance. As the amount of data to be handled increases, the approaches that are used must be not only effective, efficient, and economical, but must also scale to accommodate the increase of information processing.
Various semiconductors, including application specific integrated circuits (ASICs), are designed with a particular purpose in mind. As a downside of the specific design parameters of an ASIC, the circuit can no longer be altered after it leaves the production line. For this reason, ASIC designers need to be sure of their design, especially when producing large quantities of the same ASIC to prevent waste. In contrast, a programmable logic device such as a field programmable gate array (FPGA) is also a type of semiconductor, but does not have specific programming built into the design during production. Programmable logic devices often can be reprogrammed while remaining in their environment of use (e.g. while mounted on the circuit board within which the device is intended to function). Programmable logic devices typically include logic blocks (e.g. programmable Boolean logic gates) and can also include programmable memory blocks, programmable clocking blocks, and other specialized programmable blocks such as multiplier blocks and I/O ports.
Typically, programmable logic devices are programmed using a programming language to implement specific, desired logic into the programmable logic devices. The programmable logic devices can be programmed by writing data to storage on the programmable logic devices. A programmable logic device's architecture includes a programmable routing structure and an array of configurable logic blocks. The programmable routing matrix includes an ability to connect configurable logic blocks to each other. However, the programming of programmable logic devices often takes longer by orders of magnitude to effect than the actual execution of the programmed function.
Programmable logic devices allow adaptability to future (unforeseen) changes in functional requirements. In some cases, programmable logic devices are used as prototypes for ASIC or other devices. Using a programmable logic device as a prototype for an ASIC for verification and initial software development is a useful way to both decrease development time and reduce the risk of first silicon failure for the ASIC. Programmable logic devices function well in many applications such as digital video, graphics processing, communications, encryption, medical equipment, mobile computing, and instrumentation, areas which are all continuing to play an important role in the implementation of many new programmable logic designs.